package com.zxy.demo.delay.lock;

import com.zxy.demo.redis.RedisUtil;
import com.zxy.demo.spring.SpringContextUtils;

/**
 * Redis分布式锁
 * @author ZENG.XIAO.YAN
 * @date   2018年6月8日
 */

public class RedisLock {
	private static RedisUtil redisUtil;
	/** 静态代码块的方式给 redisUtil赋值 */
	static {
		if (null == redisUtil) {
			redisUtil = SpringContextUtils.getBean(RedisUtil.class);
		}
	}
	
	/**
	 * 是否被锁住
	 * @param Key
	 * @param expireSec 生存时间，单位为妙
	 * @return 被锁住： true ，没被锁：false
	 */
	public static boolean islock(String Key, long expireSec) {
		long incr = redisUtil.incr(Key, 1);
		if(1 == incr){
			//这个设置生存时间可能会设置失败，导致死锁产生。可通过定时任务来定时清理设置失败的key来解决这个问题
			redisUtil.expire(Key, expireSec);
			return false;
		} else {
			return true;
		}
	}
	
	/**
	 * 删除锁（某些场景需要）
	 * @param key
	 */
	public static void delLock(String key) {
		redisUtil.del(key);
	}
}
